﻿/***************************************************************************
 * 文件名：BankCard
 * 功能：
 * 说明：
 * -------------------------------------------------------------------------
 * 创建时间：2024/5/29 10:43:29
 * 创建人：朱洋洋
 * 邮箱： 1328128870@qq.com
 * =========================================================================
 *
 * 修改人：   
 * 修改时间：   
 * 修改说明：   
 ***************************************************************************/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using static BankCardVerify_Design.CardInfo;

namespace BankCardVerify_Design
{
    /// <summary>
    /// 银行卡验证接口，遵循单一职责原则
    /// </summary>
    public interface ICardValidationService
    {
        // 原有的银行卡号和姓名验证（二要素）
        ResultInfo ValidateCardBasicInfo(string cardNo, string customerNm);
        // 卡号、姓名、身份证（三要素）
        ResultInfo ValidateCardWith3Element(string cardNo, string customerNm, string certifId);
        // 卡号、姓名、身份证、手机号（四要素）
        ResultInfo ValidateCardWith4Element(string cardNo, string customerNm, string certifId , string phoneNo);
        //  卡号、姓名、身份证、手机号、CVN2、expired（六要素）
        ResultInfo ValidateCardWith6Element(string cardNo, string customerNm, string certifId, string phoneNo , string CVN2, string expired);
    }

    /// <summary>
    /// 第三方接口
    /// </summary>
    public class ThirdPartyCardValidationService_A : ICardValidationService
    {
        public ResultInfo ValidateCardBasicInfo(string cardNo, string customerNm)
        {
            // 实际验证逻辑（例如调用外部 API）
            // 假设验证通过
            return new ResultInfo
            {
                Code = 1,
                Message = "银行卡基本信息验证通过！"
            };
        }
        public ResultInfo ValidateCardWith3Element(string cardNo, string customerNm, string certifId)
        {
            // 调用外部API或实现逻辑验证卡号、姓名及有效期

            // 示例代码省略，实际应包含API调用及错误处理 
            return new ResultInfo
            {
                Code = 1,
                Message = "银行卡基本信息验证通过！"
            };
        }
        public ResultInfo ValidateCardWith4Element(string cardNo, string customerNm, string certifId, string phoneNo)
        {
            return new ResultInfo
            {
                Code = 1,
                Message = "银行卡基本信息验证通过！"
            };
        }
        public ResultInfo ValidateCardWith6Element(string cardNo, string customerNm, string certifId, string phoneNo, string CVN2, string expired)
        {
            return new ResultInfo
            {
                Code = 1,
                Message = "银行卡基本信息验证通过！"
            };
        }
    }

    /// <summary>
    /// 银行卡验证器
    /// </summary>
    public class BankCardValidator
    {
        private readonly ICardValidationService _validationService;
        public BankCardValidator(ICardValidationService validationService)
        {
            _validationService = validationService;
        }
        //2要素
        public void CheckCardValidityBasic(string cardNo, string customerNm)
        {
            var result = _validationService.ValidateCardBasicInfo(cardNo, customerNm);
            if (result.Code == 1)
            {
                Console.WriteLine("银行卡基本信息验证通过！");
            }
            else
            {
                Console.WriteLine("银行卡基本信息验证失败！");
            }
        }
        //3要素
        public void CheckCardValidityWith3Element(string cardNo, string customerNm, string certifId)
        {
            var result = _validationService.ValidateCardWith3Element(cardNo, customerNm, certifId);
            if (result.Code == 1)
            {
                Console.WriteLine("银行卡信息（含有效期）验证通过！");
            }
            else
            {
                Console.WriteLine("银行卡信息（含有效期）验证失败！");
            }
        }
        //4要素
        public void CheckCardValidityWith4Element(string cardNo, string customerNm, string certifId, string phoneNo)
        {
            if (_validationService.ValidateCardWith4Element(cardNo, customerNm, certifId,phoneNo).Code == 1)
            {
                Console.WriteLine("银行卡信息（含有效期）验证通过！");
            }
            else
            {
                Console.WriteLine("银行卡信息（含有效期）验证失败！");
            }
        }
        //6要素
        public void CheckCardValidityWith6Element(string cardNo, string customerNm, string certifId, string phoneNo, string CVN2, string expired)
        {
            if (_validationService.ValidateCardWith6Element(cardNo, customerNm, certifId, phoneNo , CVN2, expired).Code == 1)
            {
                Console.WriteLine("银行卡信息（含有效期）验证通过！");
            }
            else
            {
                Console.WriteLine("银行卡信息（含有效期）验证失败！");
            }
        }
    }

    [Serializable]
    public class CardInfo
    {
        /// <summary>
        /// 卡号
        /// </summary>
        public string CardNo { get; set; }
        /// <summary>
        /// 姓名
        /// </summary>
        public string CustomerNm { get; set; }
        /// <summary>
        /// 手机号
        /// </summary>
        public string PhoneNo { get; set; }
        /// <summary>
        /// 	证件号
        /// </summary>
        public string CertifId { get; set; }
        /// <summary>
        /// certifTp
        /// </summary>
        public string CertifTp { get; set; }
        /// <summary>
        /// 银行卡CVN2
        /// </summary>
        public string CVN2 { get; set; }
        /// <summary>
        /// 银行卡有效期
        /// </summary>
        public string Expired { get; set; }
    }

    [Serializable]
    public class ResultInfo { 
        /// <summary>
        /// 返回状态码 
        ///1:成功
        ///-1：失败
        /// </summary>
        public int Code { get; set; }
        /// <summary>
        /// 返回信息
        /// </summary>
        public string  Message { get; set; }
    
    }
}
